package com.ts.api.module.test.message;

import com.gitee.apanlh.util.valid.ValidParam;
import com.ts.api.common.constant.test.ApiTestResultTypeEnum;
import com.ts.api.module.api.convert.core.http.client.ApiHttpMessage;
import com.ts.api.module.product.entity.po.ProductApplyFlowPO;
import lombok.Data;

/**
 *  测试API联调消息实体
 *
 *  @author Pan
 */
@Data
public class ApiTestResultMessageItem {

    /** 请求体 */
    private String requestBody;
    /** 响应体 */
    private String responseBody;
    /** 错误消息 */
    private String errorMessage;
    /** 堆栈信息 */
    private String stackMsg;
    /** 是否测试成功 */
    private String hasTestSuc;
    /** 返回实体类型 */
    private String resultType;

    /**
     *  构建对象根据是否属于本地主体
     *
     *  @return ApiTestResultMessageItem
     */
    public static ApiTestResultMessageItem ofLocalProduct() {
        ApiTestResultMessageItem apiTestResultMessage = new ApiTestResultMessageItem();
        apiTestResultMessage.setRequestBody("本地主体无须请求");
        apiTestResultMessage.setResponseBody("本地主体无须请求");
        apiTestResultMessage.setHasTestSuc("测试成功");
        apiTestResultMessage.setResultType(ApiTestResultTypeEnum.DATA_EXCHANGE.getType());
        return apiTestResultMessage;
    }

    /**
     *  构建对象根据http请求
     *
     *  @param  apiHttpMessage    APIHttp消息返回
     *  @param  resultTypeEnum    返回类型枚举
     *  @return ApiTestResultMessageItem
     */
    public static ApiTestResultMessageItem ofHttp(ApiHttpMessage apiHttpMessage, ApiTestResultTypeEnum resultTypeEnum) {
        //  我方请求数据
        Object requestBody = apiHttpMessage.getRequestBody();
        //  我方响应数据
        String responseBody = apiHttpMessage.getResponseBody();
        //  错误信息
        String errorMsg = apiHttpMessage.getErrorMsg();
        String stackMsg = apiHttpMessage.getStackMsg();

        ApiTestResultMessageItem apiTestResultMessage = new ApiTestResultMessageItem();
        apiTestResultMessage.setErrorMessage(errorMsg);
        apiTestResultMessage.setStackMsg(stackMsg);
        apiTestResultMessage.setRequestBody(String.valueOf(requestBody));
        apiTestResultMessage.setResponseBody(responseBody);
        apiTestResultMessage.setResultType(resultTypeEnum.getType());

        if (ValidParam.isNull(stackMsg)) {
            apiTestResultMessage.setHasTestSuc("测试成功");
        } else {
            apiTestResultMessage.setHasTestSuc("测试失败");
        }
        return apiTestResultMessage;
    }

    /**
     *  构建对象根据流程数据
     *
     *  @param  productApplyFlowPO  流程数据
     *  @param  resultTypeEnum      返回类型枚举
     *  @return ApiTestResultMessageItem
     */
    public static ApiTestResultMessageItem ofProductApplyFlow(ProductApplyFlowPO productApplyFlowPO, ApiTestResultTypeEnum resultTypeEnum) {
        //  我方请求数据
        String requestBody = productApplyFlowPO.getReqData();
        //  我方响应数据
        String responseBody = productApplyFlowPO.getRespData();
        //  错误信息
        String errorMsg = productApplyFlowPO.getExceptionMsg();
        String stackMsg = productApplyFlowPO.getStackMsg();

        ApiTestResultMessageItem apiTestResultMessage = new ApiTestResultMessageItem();
        apiTestResultMessage.setErrorMessage(errorMsg);
        apiTestResultMessage.setStackMsg(stackMsg);
        apiTestResultMessage.setRequestBody(requestBody);
        apiTestResultMessage.setResponseBody(responseBody);
        apiTestResultMessage.setResultType(resultTypeEnum.getType());

        if (ValidParam.isNull(stackMsg)) {
            apiTestResultMessage.setHasTestSuc("测试成功");
        } else {
            apiTestResultMessage.setHasTestSuc("测试失败");
        }
        return apiTestResultMessage;
    }

}
